#include <stdio.h>
#include <string>
using namespace std;
long long A=1992919, B=18181971;
FILE *f;
int ts=1;
int next()
{
	A=(A*13166771+B)%1000000007;
	B=(B*67771+A)%1000000007;
	return A;
}
void createtest() { char s[20]; sprintf(s, "%03d", ts); ts++; f=fopen(s, "w"); }
void gen0()
{
	createtest();
	fprintf(f, "abacabada\n4\naba\naca\nada\nabb\n");
	createtest();
	fprintf(f, "a\n1\na\n");
	createtest();
	fprintf(f, "aa\n1\na\n");
	createtest();
	fprintf(f, "aa\n1\naa\n");
	createtest();
	fprintf(f, "ab\n2\na\nb\n");
	createtest();
	fprintf(f, "abcdef\n4\ncde\nabc\nbcd\naef\n");
}
char s[110];
void gen1(int l, int n, int k, int t)
{
	createtest();
	string s, v[105];
	int i, j;
	for(i=0; i<n; i++)
		for(j=0; j<t; v[i]+=next()%k+'a', j++);
	for(; s.size()+t<=l; )
	{
		i=next()%(s.size()+1);
		j=next()%n;
		s=s.substr(0, i)+v[j]+s.substr(i);
	}
	for(fprintf(f, "%s\n%d\n", s.c_str(), n), i=0; i<n; fprintf(f, "%s\n", v[i].c_str()), i++);
}
int main()
{
	int i;
	gen0();
	for(i=0; i<10; i++)
		gen1(20, 20, i+1, 4);
	gen1(100, 100, 1, 25);
	gen1(100, 100, 1, 50);
	gen1(100, 100, 1, 100);
	gen1(100, 100, 2, 5);
	gen1(100, 100, 2, 10);
	gen1(100, 100, 2, 20);
	gen1(100, 100, 2, 25);
	gen1(100, 100, 2, 50);
	gen1(100, 100, 2, 100);
	gen1(90, 100, 3, 15);
	gen1(100, 100, 3, 25);
	gen1(100, 100, 5, 10);
	gen1(100, 100, 19, 5);
	gen1(100, 100, 26, 1);
	gen1(100, 100, 26, 2);
	gen1(100, 100, 26, 5);
	gen1(100, 100, 26, 100);
	return 0;
}